Hide/Show some HTML table cells individually and align the remaining cells as they belong to the same row [closed]

Posted by Brian on Stack Overflow See other posts from Stack Overflow or by Brian
Published on 2012-09-25T18:58:14Z Indexed on 2012/09/27 21:37 UTC
Read the original article Hit count: 212

Filed under:
|
|
|

[Edited at the resquest of admins] The best way I can explain my problem is showning an example. I have the table that you can see on the link below (since I can't post images...), that ha a table head (blue) and four rows, whose cells are green and white in color. I just want the white cells to hide/show alternately by clicking on green cells, which would remain always visible as parent cells. After hiding white cells, the green ones should be aligned into the same row, as they would fit like tetris bricks. That's all, I think more clear is impossible.

http://i.stack.imgur.com/3n3In.jpg (follow the link to see the image explanation)

The table code:

<table class="columns" cellspacing="0" border="0">
<tr>
  <td class="left" rowspan="2">
      <div style="text-align:center;"></div>    </td>
    </tr><tr><td class="middle">
    <div id="detail_table_source" style="display:none"></div>
<br>
    <table id="detail_table" class="detail">
      <colgroup>
      <col style="width:20px;">
      <col style="width:40px;">
      <col style="width:70px;">
      <col style="width:20px;">
      </colgroup>
      <thead>
        <tr>
          <th width="88">Blahhh</th>
          <th width="211">BLAHH</th>
          <th width="229">BLAHH</th>
        </tr>
      </thead>
      <tbody>
        <tr class="parent" id="row123" style="cursor: pointer; " title="Click to expand/collapse">
          <td bgcolor="#A6A4CC">Blahhh</td>
          <td bgcolor="#A6A4CC">blah blah </td>
          <td bgcolor="#A6A4CC">Blahh</td>
        </tr>
        <tr class="child-row123" style="display: none; ">
          <td rowspan="3" bgcolor="#5B5B5B">&nbsp;</td>
          <td>blah blah </td>
          <td>blah blah</td>
        </tr>
        <tr class="child-row123" style="display: none; ">
          <td>blah blah</td>
          <td>blah blah</td>
        </tr>
        <tr class="child-row123" style="display: none; ">
          <td>blah blah</td>
          <td>blah blah</td>
        </tr>
        <tr>
          <td bgcolor="#6B7A94" class="parent" id="row456" style="cursor: pointer; " title="Click to expand/collapse"><strong>Blahh</strong></td>
          <td bgcolor="#FFFFFF" class="child-cell456" style="display: none; ">blah blah</td>
          <td bgcolor="#FFFFFF" class="child-cell456" style="display: none; ">blah blah</td>
        </tr>
        <tr>
        <td rowspan="4" valign="top" bgcolor="#5B5B5B" class="child-row456" style="display: none; ">&nbsp;</td>
          <td bgcolor="#6B7A94" class="parent" id="cell456" style="cursor: pointer; " title="Click to expand/collapse">blah blah</td>
          <td bgcolor="#6B7A94" class="parent" id="cell456" style="cursor: pointer; " title="Click to expand/collapse">blah blah</td>
        </tr>
        <tr>
          <td class="child-cell456" style="display: none; ">blah blah</td>
          <td class="child-cell456" style="display: none; ">blah blah</td>
        </tr>
        <tr>
          <td class="child-cell456" style="display: none; ">blah blah</td>
          <td class="child-cell456" style="display: none; ">blah blah</td>
        </tr>
      </tbody>
    </table>

The script to hide/show whole rows (this works because it is copied from another example):

<script language="javascript">
$(function() {
    $('tr.parent')
        .css("cursor","pointer")
        .attr("title","Click to expand/collapse")
        .click(function(){
            $(this).siblings('.child-'+this.id).toggle();
        });
    $('tr[@class^=child-]').hide().children('td');
});
</script>

And the failed attempt at expanding/hiding individual cells:

<script language="javascript">
$(function() {
    $('td.parent')
        .css("cursor","pointer")
        .attr("title","Click to expand/collapse")
        .click(function(){
            $(this).siblings('.child-'+this.id).toggle();
        });
    $('td[@class^=child-]').hide().children('td');
});
</script>

© Stack Overflow or respective owner

Related posts about html

Related posts about table